package cn.elwy.rcp.core.model.ui.tree;

import java.io.Serializable;
import java.util.List;

import org.eclipse.core.runtime.IAdaptable;

public interface TreeNode extends IAdaptable, Serializable {

  /**
   * 获得当前节点信息
   * @param <T>
   * @return
   */
  public <T> T getData();

  /**
   * 获得当前节点信息
   * @param key
   * @return
   */
  public <T> T getData(String key);

  /**
   * 获得当前节点信息
   * @param <T>
   * @return
   */
  public <T> T getItem();

  /**
   * 获得当前节点信息
   * @param item
   * @return
   */
  public void setItem(Object item);

  /**
   * 设置当前节点信息
   * @param data
   * @return
   */
  public void setData(Object data);

  /**
   * 设置当前节点信息
   * @param key
   * @param data
   * @return
   */
  public void setData(String key, Object data);

  /**
   * 获得当前节点名称
   * @return
   */
  public String getName();

  /**
   * 获得子节点信息
   * @return 子节点
   */
  public TreeNode[] getChildren();

  /**
   * 获得父节点信息
   * @return 父节点
   */
  public TreeNode getParent();

  /**
   * 设置父节点
   * @param parent 父节点
   */
  public void setParent(TreeNode parent);

  /**
   * 添加子节点
   * @param child 子节点
   */
  public void addChildNode(TreeNode child);

  /**
   * 设置子节点
   * @param children 子节点
   */
  public void setChildren(List<TreeNode> children);

  /**
   * 在指定位置插入子节点
   * @param child 子节点
   * @param index 插入位置
   */
  public void insertChild(TreeNode child, int index);

  /**
   * 删除子节点
   * @param child 子节点
   */
  public void removeChild(TreeNode child);

  /**
   * 获得根节点信息
   * @return 根节点
   */
  public TreeNode getRootNode();

  public boolean hasChildren();

  public boolean isLeafNode();

  /**
   * 获得节点图像
   * @return
   */
  public String getImage();

  /**
   * 获得节点图像
   * @return
   */
  public String[] getImages();

  /**
   * 获得节点图像
   * @return
   */
  public void setImages(String[] images);

  /**
   * 获得节点所有列的信息
   * @return
   */
  public String[] getTexts();

  /**
   * 设置节点所有列的信息
   * @param texts
   */
  public void setTexts(String[] texts);

  /**
   * 获得节点所有列的信息
   * @return
   */
  public int getStart();

  /**
   * 获得节点所有列的信息
   * @return
   */
  public void setStart(int start);

  /**
   * 是否选中
   * @return
   */
  public boolean isChecked();

  /**
   * 设置选择状态
   * @param isChecked
   */
  public void setChecked(boolean isChecked);

  /**
   * 是否动态加载
   * @return
   */
  public boolean isDynamic();

  /**
   * 设置选择状态
   * @param isDynamic
   */
  public void setDynamic(boolean isDynamic);

}
